package controleur;

import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.JList;

import model.ActionAdmin;
import Serveur.RechercheTransport;
import Serveur.Serveur;
import Both.*;
import view.*;

public class ToutFenetre {
    public Fenetre1 maFenetre1;
    public Fenetre2 maFenetre2;
    public Fenetre3 maFenetre3;
    public Serveur monServeur;
    public ArrayList<Trajet> maList;
    public RechercheTransport maRecherche;
    public ActionAdmin monActionAdmin;

    public ToutFenetre() {

        initialiser();
    }

    public void initialiser() {
        monServeur = new Serveur();
        maList = new ArrayList<Trajet>();
        maFenetre1 = new Fenetre1(Ville.allVille(), this);
        maFenetre2 = new Fenetre2("Ajouter ou modifier un trajet", this);
        maFenetre3 = new Fenetre3("Bienvenue", this);
        monActionAdmin = new ActionAdmin(this);
    }

    public JList getMaJListTrajetDirect(Ville v1, Ville v2) {
        removeMaList();
        ArrayList<String> l3 = new ArrayList<String>();
        ArrayList<Trajet> maListTrajet = monServeur.getListeTrajet();
        Iterator<Trajet> monIterateur = maListTrajet.iterator();
        Trajet temp;

        while (monIterateur.hasNext()) {
            temp = monIterateur.next();
            if (v1 != null && v2 != null) {
                if (temp.getVilleDepart().equals(v1)
                        && temp.getVilleArrive().equals(v2)) {
                    l3.add(temp.getVilleDepart().getVille() + "-"
                            + temp.getVilleArrive().getVille());
                    maList.add(temp);
                }
            } else {
                l3.add(temp.getVilleDepart().getVille() + "-"
                        + temp.getVilleArrive().getVille());
                maList.add(temp);
            }
        }
        JList maJList = new JList(l3.toArray());

        return maJList;
    }

    public JList getMaJListTrajetIndirect(Ville v1, Ville v2) {
        removeMaList();
        ArrayList<String> l3 = new ArrayList<String>();
        String l4 = "";
        ArrayList<Trajet> maListTrajet = monServeur.getListeTrajet();
        maRecherche = new RechercheTransport(v1, v2, maListTrajet);
        ArrayList<Trajet> maListTrajet2 = new ArrayList<Trajet>();
        if (maRecherche.cheminPossible()) {
            maRecherche.calculChemin();
            maListTrajet2 = maRecherche.Chemin();
            l4 = maListTrajet2.get(0).getVilleDepart().getVille();
            Iterator<Trajet> monIterateur = maListTrajet2.iterator();
            Trajet temp;
            while (monIterateur.hasNext()) {
                temp = monIterateur.next();
                l4 = l4 + "-" + temp.getVilleArrive().getVille();
                maList.add(temp);
            }
            l3.add(l4);
        } else {
            System.out
                    .println("Aucune succection de Trajet n'est disponible pour rejoindre la ville : "
                            + v1.getVille() + " à la ville : " + v2.getVille());
        }
        JList maJList = new JList(l3.toArray());
        return maJList;
    }

    public ArrayList<Trajet> getListTrajet() {
        return maList;
    }

    public void removeMaList() {
        while (!maList.isEmpty()) {
            maList.remove(0);
        }
    }
}
